//
//  StatusListViewModel.swift
//  MicroBlog
//
//  Created by 002 on 15/10/19.
//  Copyright © 2015年 002. All rights reserved.
//

import Foundation
import SDWebImage

class StatusListViewModel {
    
    /// 微博数据数组 - 上拉/下拉刷新
    lazy var statusList = [StatusViewModel]()
    
    /// 下拉刷新计数
    var pulldownCount : Int?
    
    /// 刷新加载用户的微博数据
    ///
    /// :param: isPullup 是否上拉
    /// :param: finished 完成回调
    func loadStatus(isPullup isPullup : Bool ,finished: (isSuccessed: Bool) ->()) {
        
        // 下拉刷新，数组中第一条微博id 用于加载比当前微博新的微博（新发的微博）
        let since_id = isPullup ? 0 : (statusList.first?.status.id ?? 0)
        // 上拉刷新，返回比当前已经加载微博的最后一条微博（以便加载比最后一条早的微博）
        let max_id = isPullup ? (statusList.last?.status.id ?? 0) : 0
        
        StatusDAL.loadStatus(since_id, max_id: max_id) { (array) -> () in
        
            // 1. 取得回调的数组 为nil 说明错误
            guard let array = array else {
                finished(isSuccessed: false)
                return
            }
            
            // 2->遍历数组字典转模型
            var dataList = [StatusViewModel]()
            for dict in array {
                dataList.append(StatusViewModel(status: Status.init(dict: dict)))
            }
            print("刷新到 \(dataList.count) 条数据")
            // 记录下拉刷新的数据
            self.pulldownCount = since_id > 0 ? dataList.count : nil
            // 3->拼接数据
            if max_id > 0 {
                self.statusList += dataList
            } else {
                self.statusList = dataList + self.statusList
            }
                        
            // 4. 缓存单张图片,完成回调
            self.cacheSingleImage(dataList,finished:finished)
        }
    }
    
    // MARK:缓存单张图片
    private func cacheSingleImage(dataList: [StatusViewModel],finished:(isSuccessed :
        Bool) -> ()) {
    
        // 1. 创建调度组
        let group = dispatch_group_create()
        // 缓存数据长度
        var dataLength = 0
        // 2. 遍历视图模型数组
        for vm in dataList {
            // 如果图片数量不是1张就退出当前循环继续下一次循环
            if vm.thumbnailUrls?.count != 1 {
                continue
            }
            // 获取单张图片的Url
            let url = vm.thumbnailUrls![0]
//            print("开始缓存图片\(url)")
            
            // 入组监听后续的Block
            // SDwebImage -下载图片（自动缓存）
            dispatch_group_enter(group)
            
            // SDWebImage的核心下载函数，如果本地缓存已经存在，同样会通过回调完成返回
            SDWebImageManager.sharedManager().downloadImageWithURL(
                url,
                options: [],
                progress: nil,
                completed: { (image, _, _, _, _) -> Void in
                    
                    // 单张图片下载完成
                    if let img = image,
                        let data = UIImagePNGRepresentation(img) {
                            // 累加数据
                            dataLength += data.length
                        }
                    // 出组
                    dispatch_group_leave(group)
            })
            
        }
        // 3. 监听调度完成
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
//            print("缓存完成\(dataLength / 1024)KB")
            finished(isSuccessed: true)
        }
    }
}